iT邦幫忙

2023 iThome 鐵人賽

DAY 11
0
Software Development

Java基礎筆記系列 第 11

Java的三種變數:實體、區域、類別變數

  • 分享至 

  • xImage
  •  

Java的變數,依照其所在的位置、宣告的特性,可分為三種。

區域變數Local variables

  • 區域變數,又稱暫時變數、stack變數。
  • 宣告在方法或流程控制裡。
  • 需要自行設定初始值,Java不會自動給值,但可以宣告後再給值
  • 區域變數不得跨區使用,因此其存活期間是跟著方法區域一起。
  • 當結束後又被呼叫,就會進行Reset從起始值開始。
  • 記憶空間Stack存的都是區域變數(Heap存的都是實體變數)。
public class Simple {
    public static void main(String[] args) {
      
        int x = 5;   
        int y = 10;
        int sum = x + y;
        
        System.out.println("The sum of x and y is: " + sum);
    }
}
// x、y、sum都是main方法內的區域變數。

實體變數Instance variables

  • 實體變數,又稱屬性變數、成員變數。
  • 宣告在方法之外、類別裡面。
  • Java會根據資料型別給予初始值,也可自行設定初始值(需在宣告時同時給值)。
  • 實體變數的生命週期,是存於實體物件當中,因此會不斷地延續前一個物件值執行。
  • 在區域變數與實體變數名稱相同之下,若要區分是實體變數就需加上this.,避免作用為區域變數。
class Dog {
    String name; // 實體變數

    Dog(String name) {
        this.name = name; // 用 this 區分為實體變數
    }

※若宣告為static,就會變成第三種「類別變數」(又稱靜態類別)。

類別變數Class Variables

  • 類別變數最大特徵是有static關鍵字修飾,不用先建立物件,在被JVM讀取載入,所有實體被建構前,類別變數就會先被載入(類別方法亦同)。
  • 類別變數同樣有預設初始值(同實體變數)。
  • 類別變數儲存的記憶空間是global,與物件儲存空間heap不同,因此,此類別的所有物件共同擁有、修改
public class MyClass {
    static int classSize = 10 ; // 類別變數
    
    public static void main(String[] args){
    
        System.out.println("classSize(initial): " + MyClass.classSize); 
        
        MyClass obj1 = new MyClass(); // 創建MyClass的一個實體
        obj1.classSize = 20; // 修改類別變數的值
        
        System.out.println("classSize (obj1): " + MyClass.classSize);
        
        MyClass obj2 = new MyClass(); // 創建MyClass的另一個實體
        obj2.classSize = 40; // 修改類別變數的值
        
        System.out.println("classSize (obj2): " + MyClass.classSize);
    }
}

印出結果是:
classSize(initial):10
classSize (obj1):20
classSize (]obj2):40
目前classSize的值是40

常見使用的System.out.printl,其System就是類別變數之一;
而類別變數前面若加上final即被宣告為常數,其值不得任意更改,且變數名稱要改為全大寫。


上一篇
Java的break與continue
下一篇
Java的參數與引數
系列文
Java基礎筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言